package com.tedu.api.map;
import org.testng.annotations.Test;

import java.util.*;
import java.util.function.BiConsumer;

/**
 * 包位置：Java。util
 * map 顶级映射接口
 * 作用：一个元素由两个元素构成：分别建：key与值：Value；
 *    保存一个元素：Key--value【保存一对：两个对象】
 *    用途：通常与数据库搭配使用
 *    特点：建：无序，无下标，不可重复，实际存Collection
 *    Map 接口对象创建--实现类
 *    HashMap：【常用：HashMap的方法与Map方法类似】
 *    LinkedHashMap【不常用：方法与HashMap类似】
 *    TreeMap：[不用】
 *    HashTable：不用
 *    ConcurrentHashMap：【常用】 多线程
 *
 */

public class MapApI {
    @Test
    public void testMap(){
        Map<Object,String> map=new HashMap<>();
        /**
         * put(建k，值V）   返回值：Vvalue--实际Collection
         * 作用：映射集合存入一对元素：建与值
         */
        map.put("西游记","孙悟空");
        map.put("红楼梦","林黛玉");
        map.put("水浒传","宋江");
        map.put("三国志","诸葛亮");
        System.out.println("Map集合"+map);
        String lin=map.get("hongloumeng");
        System.out.println("通过建找值"+lin);
        //没有这个建
        System.out.println(""+map.get(""));
        map.remove("");
        System.out.println(""+map);
        System.out.println(""+map.size());
        boolean b=map.containsKey("");
        System.out.println(""+b);
        boolean v=map.containsValue("");
                System.out.println(""+v);

    }
    @Test
    public void testMaps(){
        Map<Object,String>map=new HashMap<>();
        map.put("唐山","棋子烧饼");
        map.put("邢台","酸枣汁");
        map.put("邯郸","二宝烧鸡");
        map.put("沧州","火锅鸡");
        Set<Object> set=map.keySet();
        for(Object o:set){
            System.out.println(""+o);
        }
        //2.values()    获取所有值
        Collection<String> c=map.values();
        //遍历所有的值：增强for：获取集合的所有元素
        for(String s:c){
            System.out.println(""+s);
        }
        //获取所有的键值
        //Entry存键值的对象--Map增加一个针对“键值对”的对象
        //Map。Entry  【Map接口。Entry对象】获取到表示所有的Entry的方法
        Set<Map.Entry<Object,String>> sets=map.entrySet();
        for(Map.Entry<Object,String>s:sets){
            //System.out.println("所有entry："+s);
            //entry中Key 与Value方法：getKey（） getValue（）
            Object key=s.getKey();
            String value=s.getValue();
            System.out.println("打印Entry中建与值："+key+" "+value);
        }
    }
    /**
     * forEach()
     * BiConsumer 接口   --封装了Entry对象的键与值
     * 作用：遍历出集合中所有的entry【建与值】
     *
     */
    @Test
    public void testForEach(){
        Map<Object,String>map=new HashMap<>();
        map.put("唐山","棋子烧饼");
        map.put("邢台","酸枣汁");
        map.put("邯郸","二宝烧鸡");
        map.put("沧州","火锅鸡");//遍历映射集合：键与值
        map.forEach(new BiConsumer<Object, String>() {
            @Override
            public void accept(Object o, String s) {
           System.out.println("所有的键"+o);
                System.out.println("所有的值"+s);
            }
        });

    }
    /**
     * HashMap中独有的方法
     * putIfAbsent（）
     * 作用：存一组entry，先指定
     */
    @Test
    public void testHashMap(){
        Map<Object,String>map=new HashMap<>();
        map.put("唐山","棋子烧饼");
        map.put("邢台","酸枣汁");
        map.put("邯郸","二宝烧鸡");
        map.put("沧州","火锅鸡");
        map.put("tangshan","糖敦");
        map.putIfAbsent("石家庄","八大碗");
        map.putIfAbsent("唐山","麻糖");
        System.out.println("HashMap集合"+map);
    }
}




























